home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / jammer.arc / JAMMER.BAS (.txt) next >
Encoding:
GW-BASIC  |  1987-04-06  |  7.6 KB  |  269 lines

  1. 10  DEFINT A-Z
  2. 20  BRIGHT=10:DULL=2
  3. 50  CLS
  4. 55  KEY OFF
  5. 60  JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
  6. 65  NUM.SCORE=0
  7. 150  ON ERROR GOTO 50000
  8. 160  OPEN "JAMMER.SCO" FOR INPUT AS #1
  9. 170  IF EOF(1) THEN CLOSE:GOTO 190
  10. 171  NUM.SCORE=NUM.SCORE+1
  11. 175  LINE INPUT #1,NAM$(NUM.SCORE):INPUT #1,SCO(NUM.SCORE)
  12. 180  GOTO 170
  13. 190  CLS:FOR S=NUM.SCORE+1 TO 10:NAM$(S)="-----------------":SCO(S)=0:NEXT :NUM.SCORE=10
  14. 200  CLS
  15. 300  DEF SEG:POKE 106,0
  16. 350  GOSUB 40000
  17. 400  YC=40:XC=12
  18. 500  LOCATE XC,YC
  19. 600  CP$(1)=CHR$(201)
  20. 700  CP$(2)=CHR$(187)
  21. 800  CP$(4)=CHR$(200)
  22. 900  CP$(3)=CHR$(188)
  23. 1000  KEY OFF:WIDTH 80
  24. 1100  DEF SEG=&HB800:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB800
  25. 1200  DEF SEG=&HB000:POKE 0,77:IF PEEK(0)=77 THEN SEG=&HB000
  26. 1300  CLS
  27. 1400  DEF FNPK$(ROW,COL)=CHR$(PEEK((ROW-1)*160 +(COL-1)*2))
  28. 1500  DEF SEG=SEG
  29. 1600  BRIGHT=10:DULL=2
  30. 1700  FALSE=0:TRUE=NOT FALSE
  31. 1800  Z=0               
  32. 1900  IF Z>10 THEN Z=10
  33. 1950  DEF SEG=SEG
  34. 2000  FOR LVL=1 TO 6
  35. 2100     CY(1)=YC-(LVL*4+Z-1)
  36. 2200     CX(1)=XC-(LVL*2-1)
  37. 2300     CY(3)=YC+(LVL*4+Z-1)
  38. 2400     CX(3)=XC+(LVL*2-1)
  39. 2500     CY(4)=YC-(LVL*4+Z-1)
  40. 2600     CX(4)=XC+(LVL*2-1)
  41. 2700     CY(2)=YC+(LVL*4+Z-1)
  42. 2800     CX(2)=XC-(LVL*2-1)
  43. 2900     FOR I=1 TO 4
  44. 3000        LOCATE CX(I),CY(I)
  45. 3100        PRINT CP$(I);
  46. 3200     NEXT
  47. 3300     FOR X=CX(1)+1 TO CX(4)-1
  48. 3400        LOCATE X,CY(1):PRINT CHR$(186);
  49. 3500        LOCATE X,CY(2):PRINT CHR$(186);
  50. 3600     NEXT
  51. 3700     FOR Y=CY(1)+1 TO CY(2)-1
  52. 3800        LOCATE CX(1),Y:PRINT CHR$(205);
  53. 3900        LOCATE CX(3),Y:PRINT CHR$(205);
  54. 4000     NEXT
  55. 4100     XLIM(1,LVL)=CX(1)+1
  56. 4200     XLIM(2,LVL)=CX(2)+1
  57. 4300     XLIM(3,LVL)=CX(3)-1
  58. 4400     XLIM(4,LVL)=CX(4)-1
  59. 4500     YLIM(1,LVL)=CY(1)+2
  60. 4600     YLIM(2,LVL)=CY(2)-2
  61. 4700     YLIM(3,LVL)=CY(3)-2
  62. 4800     YLIM(4,LVL)=CY(4)+2
  63. 4900  IF LVL=1 THEN 5800
  64. 5000  FOR X=XLIM(1,LVL) TO XLIM(4,LVL)
  65. 5100     LOCATE X,YLIM(1,LVL):PRINT CHR$(4);
  66. 5200     LOCATE X,YLIM(2,LVL):PRINT CHR$(4);
  67. 5300  NEXT
  68. 5400  FOR Y=YLIM(1,LVL) TO YLIM(2,LVL) STEP 2
  69. 5500     LOCATE XLIM(1,LVL),Y:PRINT CHR$(4);
  70. 5600     LOCATE XLIM(3,LVL),Y:PRINT CHR$(4);
  71. 5700  NEXT
  72. 5800  NEXT
  73. 5900  FOR X=XC-1 TO XC+1
  74. 6000     LOCATE X,YLIM(1,6):PRINT STRING$(18," ");
  75. 6100     LOCATE X,YLIM(2,2):PRINT STRING$(18," ");
  76. 6200  NEXT
  77. 6300  FOR Y=YC-2 TO YC+2                                          
  78. 6400     FOR X=XLIM(1,6) TO XLIM(1,2)
  79. 6500        LOCATE X,Y:PRINT " ";
  80. 6600        LOCATE X+12,Y:PRINT " ";
  81. 6700     NEXT
  82. 6800  NEXT
  83. 6900  TOTPTS=4*(50+5*INT(Z/2))-1
  84. 7000  LOCATE 3,1:PRINT "Total";
  85. 7100  LOCATE 4,1:PRINT "Points";
  86. 7200  LOCATE 2,1:PRINT USING " ###";TOTPTS;
  87. 7300  PTSREM=TOTPTS
  88. 7400  LOCATE 6,1:PRINT USING " ###";PTSREM
  89. 7500  LOCATE 7,1:PRINT "Remain";
  90. 7600  JAMSYM$=CHR$(8):RACSYM$=CHR$(15)
  91. 7700  RACLVL=6:JAMLVL=6
  92. 7800  RACX=XLIM(4,RACLVL):RACY=YLIM(4,RACLVL)
  93. 7900  JAMX=XLIM(3,JAMLVL):JAMY=YLIM(3,JAMLVL)
  94. 8000  RACBASESPD= 2:JAMBASESPD=1
  95. 8100  RACDIR=1:JAMDIR=2
  96. 8200  RACMAX=10:RACMIN=1
  97. 8300  RACXINC(1)=-1:RACYINC(1)=0
  98. 8400  RACXINC(2)=0:RACYINC(2)=1
  99. 8500  RACXINC(3)=1:RACYINC(3)=0
  100. 8600  RACXINC(4)=0:RACYINC(4)=-1
  101. 8700  JAMXINC(1)=0:JAMYINC(1)=-1
  102. 8800  JAMXINC(2)=-1:JAMYINC(2)=0
  103. 8900  JAMXINC(3)=0:JAMYINC(3)=1
  104. 9000  JAMXINC(4)=1:JAMYINC(4)=0
  105. 9100  JG$=CHR$(4)
  106. 9200  RACMOV%=RACBASESPD:JAMMOV%=JAMBASESPD
  107. 9250  IF NUM.SCO<>0 THEN LOCATE 25,1:PRINT USING "High Score: ##### by \              \";SCO(1),NAM$(1);
  108. 9300  '------------- Main loop ----------------
  109. 9400  A$=INKEY$:IF A$<>"" THEN GOSUB 14600
  110. 9500  IF ((JAMX=XC) OR (JAMY=YC)) AND (RACLVL<>JAMLVL) THEN GOSUB 18000
  111. 9600  RACMOV%=RACMOV%-1:IF RACMOV%=0 THEN RACMOV%=RACBASESPD:RAC.JUMPED=FALSE:GOSUB 9900
  112. 9700  JAMMOV%=JAMMOV%-1:IF JAMMOV%=0 THEN JAMMOV%=JAMBASESPD:JAM.JUMPED=FALSE:GOSUB 12200
  113. 9800  GOTO 9300
  114. 9900  '============= moves racer ================
  115. 10000  LOCATE RACX,RACY:PRINT " ";
  116. 10100  RACX=RACX+RACXINC(RACDIR):RACY=RACY+RACYINC(RACDIR)
  117. 10200  IF RACX<XLIM(1,RACLVL) OR RACX>XLIM(3,RACLVL) THEN 10800
  118. 10300  IF RACY<YLIM(1,RACLVL) OR RACY>YLIM(2,RACLVL) THEN 10800
  119. 10400  G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
  120. 10500  IF G$=CHR$(8) THEN 13400
  121. 10600  COLOR BRIGHT:LOCATE RACX,RACY:PRINT RACSYM$;:COLOR DULL
  122. 10700  RETURN
  123. 10800  RACX=XLIM(RACDIR,RACLVL):RACY=YLIM(RACDIR,RACLVL)
  124. 10900  RACDIR=(RACDIR MOD 4)+1
  125. 11000  GOTO 10100
  126. 11100  SOUND 56,2:PTSREM=PTSREM-1
  127. 11200  LOCATE 6,1:PRINT USING " ###";PTSREM
  128. 11300  IF PTSREM=0 THEN 11500
  129. 11400  RETURN
  130. 11500  CLS
  131. 11600  LOCATE 10,30
  132. 11650  SCO=INT(Z/2)*100+100
  133. 11800  LOCATE 12,30
  134. 11900  PRINT "Bravo -- now try this one"
  135. 12000  FOR I=1 TO 10:FOR J=0 TO 9:SOUND 200+50*J,1:NEXT :NEXT :CLS
  136. 12100  Z=Z+2:GOTO 1900
  137. 12200  '============= moves jammer ===============
  138. 12300  LOCATE JAMX,JAMY:IF JG$=CHR$(8) THEN COLOR BRIGHT ELSE COLOR DULL
  139. 12350  PRINT JG$;:COLOR DULL
  140. 12400  JAMX=JAMX+JAMXINC(JAMDIR):JAMY=JAMY+JAMYINC(JAMDIR)
  141. 12500  IF JAMX<XLIM(1,JAMLVL) OR JAMX>XLIM(3,JAMLVL) THEN 13100
  142. 12600  IF JAMY<YLIM(1,JAMLVL) OR JAMY>YLIM(2,JAMLVL) THEN 13100
  143. 12700  JG$=FNPK$(JAMX,JAMY)
  144. 12800  IF JG$=CHR$(15) THEN 13400
  145. 12900  COLOR BRIGHT:LOCATE JAMX,JAMY:PRINT JAMSYM$;:COLOR DULL
  146. 13000  RETURN
  147. 13100  JAMX=XLIM(JAMDIR,JAMLVL):JAMY=YLIM(JAMDIR,JAMLVL)
  148. 13200  JAMDIR=ABS(JAMDIR-1): IF JAMDIR=0 THEN JAMDIR=4
  149. 13300  GOTO 9900
  150. 13400  COLOR BRIGHT
  151. 13500  LOCATE XC,YC-Z/2-1
  152. 13600  PRINT "Oops";
  153. 13700  FOR I=250 TO 50 STEP -5:SOUND I,1:NEXT
  154. 13800  LOCATE 10,30                            
  155. 13850  SCO=(TOTPTS-PTSREM)/TOTPTS*100+(INT(Z/2))*100
  156. 13900  PRINT USING "Your score was ####" ;SCO
  157. 14000  FOR I=1 TO 5:LOCATE RACX,RACY:PRINT CHR$(8);:FOR WT=1 TO 500:NEXT:LOCATE RACX,RACY:PRINT " ";:FOR WT=1 TO 500:NEXT:NEXT
  158. 14100  CLS
  159. 14400  COLOR 2
  160. 14450  GOSUB 30000
  161. 14500  GOTO 200
  162. 14600  A=ASC(RIGHT$(A$,1))
  163. 14700  IF A=72 AND LEN(A$)=2 THEN A=1:GOTO 15200
  164. 14800  IF A=77 AND LEN(A$)=2 THEN A=2:GOTO 15200
  165. 14900  IF A=80 AND LEN(A$)=2 THEN A=3:GOTO 15200
  166. 15000  IF A=75 AND LEN(A$)=2 THEN A=4:GOTO 15200
  167. 15050  BEEP
  168. 15100  A=0:RETURN
  169. 15200  IF A=RACDIR THEN RACBASESPD=RACBASESPD-1:SOUND 250,3:GOTO 15700
  170. 15300  IF A=(RACDIR+1) MOD 4 +1 THEN RACBASESPD=RACBASESPD+1:SOUND 150,3:GOTO 15900
  171. 15400  IF A=(RACDIR MOD 4)+1 THEN 16100
  172. 15500  IF A=((RACDIR+2) MOD 4)+1 THEN 17300
  173. 15600  STOP
  174. 15700  IF RACBASESPD<RACMIN THEN RACBASESPD=RACMIN
  175. 15800  RETURN
  176. 15900  IF RACBASESPD>RACMAX THEN RACBASESPD=RACMAX
  177. 16000  RETURN
  178. 16100  IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 16400
  179. 16200  IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 16400
  180. 16300  RETURN
  181. 16400  LOCATE RACX,RACY:PRINT " ";
  182. 16500  IF RAC.JUMPED THEN RETURN
  183. 16600  RACLVL=RACLVL-1:SOUND 190,3:IF RACLVL<2 THEN RACLVL=2
  184. 16700  IF RACDIR=1 THEN RACY=YLIM(1,RACLVL)
  185. 16800  IF RACDIR=2 THEN RACX=XLIM(2,RACLVL)
  186. 16900  IF RACDIR=3 THEN RACY=YLIM(3,RACLVL)
  187. 17000  IF RACDIR=4 THEN RACX=XLIM(4,RACLVL)
  188. 17040  G$=FNPK$(RACX,RACY):IF G$=CHR$(4) THEN GOSUB 11100
  189. 17050  IF G$=CHR$(8) THEN 13400
  190. 17100  RAC.JUMPED=TRUE
  191. 17200  RETURN
  192. 17300  IF ((RACDIR=1 OR RACDIR=3) AND ABS(RACX-XC)<2) THEN 17600
  193. 17400  IF ((RACDIR=2 OR RACDIR=4) AND ABS(RACY-YC)<2) THEN 17600
  194. 17500  RETURN
  195. 17600  LOCATE RACX,RACY:PRINT " ";
  196. 17700  IF RAC.JUMPED THEN RETURN
  197. 17800  RACLVL=RACLVL+1:SOUND 90,3:IF RACLVL>6 THEN RACLVL=6
  198. 17900  GOTO 16700
  199. 18000  IF RND(5)<0.97-(Z*0.1)   THEN LOCATE JAMX,JAMY:PRINT " "; ELSE SOUND 300,2:SOUND 400,2
  200. 18100  IF JAM.JUMPED THEN RETURN
  201. 18200  JAM.JUMPED=TRUE:IF RND(5)>0.9 THEN RETURN
  202. 18250  IF JAMLVL>2 AND RND(0.5)>0.9 THEN JAMLVL=JAMLVL-1:SOUND 190,3:GOTO 18500
  203. 18300  IF RACLVL>JAMLVL THEN JAMLVL=JAMLVL+1:SOUND 90,3
  204. 18400  IF RACLVL<JAMLVL THEN JAMLVL=JAMLVL-1:SOUND 190,3
  205. 18500  IF JAMDIR=1 THEN JAMX=XLIM(1,JAMLVL)
  206. 18600  IF JAMDIR=2 THEN JAMY=YLIM(2,JAMLVL)
  207. 18700  IF JAMDIR=3 THEN JAMX=XLIM(3,JAMLVL)
  208. 18800  IF JAMDIR=4 THEN JAMY=YLIM(4,JAMLVL)
  209. 18900  RETURN
  210. 30000  IP=1
  211. 30010  FOR I=1 TO 10
  212. 30020     IF SCO(I)>SCO THEN IP=I+1
  213. 30030  NEXT
  214. 30040  IF IP=11 THEN RETURN
  215. 30050  PRINT "Congratulations, your score is in the top 10 !!!"
  216. 30055  IF INKEY$<>"" THEN 30055
  217. 30060  PRINT:PRINT
  218. 30070  PRINT"What is your name: ";:COLOR BRIGHT:LINE INPUT N$:COLOR DULL
  219. 30080  FOR I=9 TO IP STEP -1
  220. 30090    NAM$(I+1)=NAM$(I)
  221. 30100    SCO(I+1)=SCO(I)
  222. 30110  NEXT
  223. 30120  SCO(IP)=SCO
  224. 30130  NAM$(IP)=N$
  225. 30140  OPEN "JAMMER.SCO" FOR OUTPUT AS #1
  226. 30150  FOR I=1 TO 10
  227. 30155      PRINT #1,NAM$(I):PRINT#1,SCO(I)
  228. 30160  NEXT:CLOSE:RETURN
  229. 40000  RC=60
  230. 40005  JC=10:JR=20
  231. 40010  COLOR BRIGHT:LOCATE 10,RC,0:PRINT "Racer  ";
  232. 40020  LOCATE JR,JC:PRINT " Jammer":COLOR DULL
  233. 40030  FOR WT=1 TO 50:NEXT
  234. 40035  IF JR=11 THEN 41000
  235. 40040  RC=RC-1:JC=JC+1
  236. 40045  IF JC>RC-10 THEN LOCATE JR,JC:PRINT "      ";:JR=JR-1:JC=JC-1
  237. 40050  GOTO 40010
  238. 41000  LOCATE 1 ,10:PRINT "Use arrow keys to speed up,slow down, and change direction"
  239. 41005  PRINT:PRINT "                 Press Space Bar to Begin  or  Q to Quit"
  240. 41010  LOCATE 5,20:PRINT RACSYM$;" -- Racer    ";JAMSYM$;" -- Jammer"
  241. 41050  LOCATE 15,10
  242. 41055  PRINT "High Scores:"
  243. 41056  PRINT "         --------------":PRINT
  244. 41060  FOR I=1 TO 5
  245. 41063  IF RIGHT$(NAM$(I),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
  246. 41065  PRINT USING "   ## \            \   #####   ";I,NAM$(I),SCO(I);
  247. 41066  IF RIGHT$(NAM$(I+5),1)="|" THEN COLOR DULL ELSE COLOR BRIGHT
  248. 41068  PRINT USING "   ## \            \   #####   ";I+5,NAM$(I+5),SCO(I+5)
  249. 41069  COLOR DULL
  250. 41070  NEXT
  251. 41095  IN$=INKEY$
  252. 41096  IF IN$=" " THEN CLS:RETURN
  253. 41097  IF IN$="Q" OR IN$="q" THEN CLS:SYSTEM ELSE 41095
  254. 50000  '==== Error =======
  255. 50010  IF ERR=53 AND ERL=160 THEN GOTO 51000
  256. 50090  ON ERROR GOTO 0
  257. 51000  NAM$(1)="Heroic            |":SCO(1)=500
  258. 51005  NAM$(2)="Professional      |":SCO(2)=400
  259. 51010  NAM$(3)="Challenger        |":SCO(3)=300
  260. 51015  NAM$(4)="Excellent         |":SCO(4)=250
  261. 51020  NAM$(5)="Very Good         |":SCO(5)=200
  262. 51025  NAM$(6)="Good              |":SCO(6)=150
  263. 51030  NAM$(7)="Amateur           |":SCO(7)=100
  264. 51035  NAM$(8)="Beginner          |":SCO(8)=75
  265. 51045  NAM$(9)="Poor              |":SCO(9)=50
  266. 51050  NAM$(10)="Why Bother?      |":SCO(10)=25
  267. 51100  NUM.SCORE=10
  268. 52000  RESUME 190
  269.